<?php

require_once 'model/LoginHandler.php';
require_once 'model/UserHandler.php';
require_once 'model/ProductHandler.php';
require_once 'model/ShopBasketHandler.php';
require_once 'view/LoginView.php';
require_once 'view/RegistrerView.php'; //-----------------------------Behövs EJ-----------------------
require_once 'view/TextStringOutput.php';
require_once 'view/ProductView.php';

// Logincontroller hanterar nästan all kontroll så namnet kanske inte är optimalt
class LoginController {

	private $m_loginHandler;
	private $m_userHandler;
	private $m_productHandler;
	private $m_shopBasketHandler;

	public function __construct(LoginHandler $a_loginHandler, UserHandler $a_userHandler, ProductHandler $a_productHandler, ShopBasketHandler $a_shopBasketHandler) {
		$this -> m_loginHandler = $a_loginHandler;
		$this -> m_userHandler = $a_userHandler;
		$this -> m_productHandler = $a_productHandler;
		$this -> m_shopBasketHandler = $a_shopBasketHandler;
	}

	public function DoControll() {
		//hantera indata
		//förändra modellen

		$string = "";
		//Instanser
		$loginView = new LoginView();
		$registrerView = new RegistrerView(); //-----------------Behövs EJ-----------------------------
		$productView = new ProductView();
		$shopBasketView = new ShopBasketView();
		$textStringOutput = new TextStringOutput();
		
		
		//Om jag inte är inloggad...
		if ($this ->m_loginHandler ->IsLoggedIn() ==FALSE) {
			//Om jag försöker att logga in...	
			if ($loginView -> TriedToLogin() == TRUE) {
				//Gör loggin och ta UserName och Password	
				if ($this -> m_loginHandler -> DoLogin($loginView -> GetUserName(), $loginView -> GetPassword())) {
					//Sätter Cookien	
					$string .= $loginView -> RememberMeAndSetCookie();
					
				} else {
					//Skriver ut fel användare eller lösen	
					$string = TextStringOutput::WrongUser;	
				}
			}
		}else{
			if($loginView -> TriedToLogOut() == TRUE){
				$this -> m_loginHandler -> DoLogout();
				//Skriver utloggad
				$string = TextStringOutput::LoggedOut;
				//Tar bort Cookies
				$loginView ->DeleteCookie();
			}
		} 
		
		// Om Deleteknappen för användaren blir sann... Ta bort användare, logga ut och ta bort cookies
		if ($loginView ->TriedToDelete()==TRUE){
				$userName = $this ->m_loginHandler ->GetLoggedInUserName();
				$this->m_userHandler->DeleteUser($userName);
				$this ->m_loginHandler ->DoLogout();
				$loginView ->DeleteCookie();
				$string = TextStringOutput::RaderatKonto;
		}
		


		//--------------------------------------Utdata------------------------------
		
		//------------------------------------Inloggad-----------------------------
		if ($this -> m_loginHandler -> IsLoggedIn()) {
			
				//Skriver Inloggad och visar lösenord	
				if(isset($_POST[LoginView::UserName])) {
					//$string .=  TextStringOutput::Welcome . $_POST[LoginView::UserName];
					//Avmarkera om inloggad ska synas
					//$string .=  TextStringOutput::Inloggad . TextStringOutput::Welcome . $_POST[LoginView::UserName];
				}
				
				// Om cookien är satt och användaren kommer tillbaka
				if(isset($_COOKIE[LoginView::CookieName])) {
					//$string .= TextStringOutput::WelcomeBack . $_COOKIE[LoginView::CookieName];
				}
				
				
				// Innehåller HTML för produkvyn, hämtar vad som ska skrivas ut.
				$MenuAndContent = "";
	
				// -------------------------------------Insert to shopbasketbaskethandler-----------------
				//lägg i varukorg-knappen
				if(isset($_POST[ProductView::BuyButton])) {
					$product = $this->m_productHandler->GetProductsById($_GET[ProductView::ShowItem]);
					$insertShopProduct= $this->m_shopBasketHandler->InsertShopProduct($this->m_loginHandler->GetLoggedInUserID(), 
																					$product->m_price, $_GET[ProductView::ShowItem]);																														
				header('Location: index.php?addtocartsucces');
				}
				//-------------------------------------UPDATE status till 1 om bekräfta köpknappen trycks in------------------------
				
				//Bekräfta köp-knappen (slutligt köp)
				if (isset($_POST[ShopBasketView::buyProducts])) {
					// Jahaja... HTML-element här...	
					$MenuAndContent .="<div id='productIsBought'>Köpet är registrerat</div>";
					//användarID
					$userID = $this->m_loginHandler->GetLoggedInUserID();
					//För att få användarnamn
					$username = $this->m_loginHandler->GetLoggedInUserName();
					
					$updateStatus = $this->m_shopBasketHandler->UpdateShopProduct($userID, $_GET['finalbuy']);

					//------------------------------------För mailen-----------------------------------------------------------------
					//Hämtar mailen från userhandler som vet userID
					$email = $this->m_userHandler->GetUserMail($userID);
					
					//Hämtar namn från loginhandler
					$user = $this->m_loginHandler->GetLoggedInUserName($username);
					
					//hämtar vad som köpts
					//$order = $this->m_shopBasketHandler->GetOrderlinesBought($orderlines);
					
					//shopBasketView ropar på funktionen SendMail som skickar HTML till angiven E-post tillsammans med användarnamn och e-post
					$shopBasketView->SendMail($email, $user);
					//Hänger på status för skickat mail
					$MenuAndContent .= $shopBasketView->GetMailNotifications();
				}
					
				
				// ------------------------------------Deleteknapparna för produkten i varukorgen-----------------
				if(isset($_POST[ShopBasketView::deleteItem])) {
					$deleteShopProduct=$this->m_shopBasketHandler->DeleteShopProduct($this->m_loginHandler->GetLoggedInUserID(), $_GET['deletefromcart']);
				}
				
				//----------------------------------Skriver ut alla star wars-figurer-------------------
				if(isset($_GET[ProductView::AllStarWars])) {
					$starwarsArray= $this->m_productHandler->GetProductsByCategory("Star Wars");
					$MenuAndContent .= $productView -> ShowCategoryMenuAndProduct($starwarsArray);
				}
				
				
				//---------------------------------Skriver ut alla smurfar----------------------------
				else if(isset($_GET[ProductView::AllSmurfs])) {
					$smurfArray= $this->m_productHandler->GetProductsByCategory("Smurf");
					$MenuAndContent .= $productView -> ShowCategoryMenuAndProduct($smurfArray);
				}
				
				// ---------------------------------skriver ut specifik figur------------------------------
				else if(isset($_GET[ProductView::ShowItem])) {
					$specificArray= $this->m_productHandler->GetProductsById($_GET[ProductView::ShowItem]);
					
					//Om specifikArray inte är ett objekt hängs felmeddelandet på...
					if(!is_object($specificArray)){
						$MenuAndContent .= $productView->AddErrorMessage($specificArray);
					}
					//Annars visas specifik produkt som den ska, som är tänkt...
					else{
						$MenuAndContent .= $productView->ShowSpecifikProductAndMenu($specificArray);
					}
				}
			
		 else {
				//---------------------------------Skriver ut alla produkter---------------------------
				$MenuAndContent .= $productView->ShowCategoryMenuAndProduct($this->m_productHandler->GetAllProducts());
			}
			// Gör "logoutboxen" D.V.S. Hela siten, och skickar med array med databasuppgifter
			//MenuAndContent får även extravärdet av felmeddelandet
			$string .= $loginView -> DoLogoutBox($this->m_productHandler, $this->m_shopBasketHandler, $MenuAndContent);
		}

   //Annars utloggad
   else {
		$string .= $loginView -> DoLoginBox();
		 //Skriver utloggad, Avmarkera vid behov
		 //$string .= TextStringOutput::Utloggad;
		}
	return $string;
	}

}
